home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
rb
/
jlcd100.lzh
/
TNB_FSW
/
TMS062.Lzh
/
TMS.s
< prev
next >
Wrap
Text File
|
1995-10-30
|
14KB
|
704 lines
.include tnb.mac
.include iocscall.mac
.include doscall.mac
HEAD1 = 'TMS_'
HEAD2 = '_062'
StartStatio:*******************常駐部
SS:
.dc.l -1
.dc.w $8000.w
.dc.l STRR
.dc.l ETYP
dhead: .dc.l HEAD1,HEAD2
STRA5: .dc.l $0.l
STRR: move.l a5,STRA5
rts
ETYP:
movem.l d0/a5,-(a7)
movea.l STRA5(pc),a5
bsr ETYPSUB
move.b d0,$3(a5)
lsr.w #8,d0
move.b d0,$4(a5)
movem.l (a7)+,d0/a5
rts
ETYPSUB:
tst.b $2(a5)
beq ETYP_KEEP
move.w #$5003,d0 *err
rts
*********************************************
head:
.dc.l HEAD1
.dc.l HEAD2
.even
IM09b6: *---------------------------
* IOCSワークコール 09b2
* マウス読み込み前処理
* 1/100sで呼ばれるらしい
* [4800bpsは1秒間に600byte 1/100sなら 6byte来る?]
IM09b6_ = $09b6.w
*----------------------------------------
* マウスHIOCS
*$0933.w
* 0=割り込みはあったが1/100s以内に処理が終わらなかった
* -1=データ読み込み準備せよ
* 1=繋がっていないから他のコネクタを
* 1> データ待ち中
*SCC割り込みがあれば 0か-1になる
* 0=プラス値なら
* -1=マイナス値なら
*----------------------------------------
* TMS.x内部ワーク
*D0933::
* -1=SCC割り込みしていない
* 0=3バイト読んでマウスを動かした
* 1=読み込み途中
*
*MsChkMod=0 コネクタチェック 本体
*MsChkMod=1 コネクタチェック キーボード
*----------------------------------------
tst.b D0933
beq IMLL1
bmi @f
*********************************************読み込み途中
subq.w #1,StCot
beq IMLL1 *たえる
rts
@@: *****************************割り込んでいない(含むエラー)
clr.b MaeBot *前のボタン状態
IMLL1: ******************************繋がっていない&読み込み終了
tst.w MsChkMod
bne IMKL1
***本体
move.b #$05,$00e98001 *WR5 = 8bit ___
move.b #$60,$00e98001 * RTS端子を 'H'にする
* つまり MSCTRLを 'H'
move.w #1,MsChkMod *コネクタチェックをキーボードにする
bra IMKL2
IMKL1: ***キーボード
@@: tst.b $00e8802d *データがのこってないか?
bpl @b
move.b #$41,$00e8802f *キーボードマウス MSCTRL OFF コマンド
clr.w MsChkMod *コネクタチェックを本体にする
IMKL2:
clr.b D0933 * = 0
subq.w #1,MsConChk
bne IMLL3
**********************X68マウスが接続されていない時の処理
* NOXMS.x 改
move.w #2,MsConChk
movem.l d0-d7/a1-a6,-(a7)
move.w sr,-(sp)
move.w #$2700,sr
clr.l $0ac6.w *IOCS-WORK
lea nuldata(pc),a1
clr.l (a1)
movea.l $0934.w,a0
jsr (a0) *ソフトキーボート
*move.l OldD(pc),d0
*move.l (a1),OldD *記憶
*bne @f
*tst.l d0
*beq TMC_L2
@@:
movea.l $0938.w,a0
jsr (a0) *マウスカーソル書き替え
TMC_L2: move.w (sp)+,sr
movem.l (a7)+,d0-d7/a1-a6
*bra IMLL3
IMLL3:
********************************************割り込み再設定
tst.b $0bbf.w *書き替え処理中?
bpl @f
rts
@@:
move.l a0,-(sp)
move.w #$0003,$092a.w *3バイトデータ
move.l #$00000930,$092c.w *ワーク先頭アドレス
lea.l $00e98003,a0
tst.b (a0)
tst.b (a0)
tst.b (a0) *初期化の一種
tst.b (a0)
tst.w MsChkMod
bne IMIL1
***本体
move.b #$05,$00e98001 *WR5 = 8bit ___
move.b #$62,$00e98001 * RTS端子を 'L'にする
* つまり MSCTRLを 'L'
bra IMIL2
IMIL1: ***キーボード
@@: tst.b $00e8802d *データがのこってないか?
bpl @b
move.b #$40,$00e8802f *キーボードマウス MSCTRL ON コマンド
IMIL2:
movea.l (sp)+,a0
st D0933 * = -1
move.w #2,StCot * =2 定数!! //ROM MS の場合 5かな
rts
IM09b6_JMP:
move.l IM09b6_JPT(pc),-(sp)
rts
IM09b6_JPT:
.dc.l 0
SCCB: *-----------------------------
* ($54)[$150]
* ($55)[$154]
* 1バイト入力割り込みルーチン!!!
*
SCCB_ = $0150.w
SCCB__ = $0154.w
move.w #$2700,sr
move.b #1,D0933 * 1=読み込み途中
move.l a1,-(sp)
movea.l $092c.w,a1
move.b $00e98003,(a1)+
move.l a1,$092c.w
subq.w #1,$092a.w
beq @f *3バイトたまったら jmp
SBLL1:
movea.l (sp)+,a1
move.b #$38,$00e98001 *SCCの他の割り込み有効化
rte
@@:
***3BYTEたまった
move.w #$0003,$092a.w
lea.l $0930.w,a1
move.l a1,$092c.w
tas.b $0bbf.w
bmi SBLL1 *前回ビットが立っていたら jmp
* ^ 処理中なら
movem.l d0-d2/a0,-(sp)
movea.l a1,a0
lea.l $0cb1.w,a1
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
subq.w #3,a1
move.b #$38,$00e98001 *SCCの他の割り込み有効化
move.w 20(sp),d0 * (5*4)戻し
or.w #$2000,d0
move.w d0,sr
****** データチェック
*move.b (a1),d0
*andi.b #$FC,d0
*bne SBLL2
****** 各コネクタ別ワーク書き込み
lea Data0(pc),a0
move.w MsChkMod(pc),d0
beq @f
addq.w #4,a0 *Data1
@@: tst.b 3(a0)
beq @f
clr.l (a0)
@@: move.b (a1),d0
or.b d0,(a0)
move.b 1(a1),d0
add.b d0,1(a0)
move.b 2(a1),d0
add.b d0,2(a0)
*********** マウスカーソル移動
*move.w MsChkMod(pc),d0
*btst d0,DrvMod *bit 0:本体 bit1:キーボード 1:機能する 0:しない
*beq SBLL2
***** ボタン調整
move.b (a1),d2 *今回のを記憶
lea BotBuf(pc),a0
move.w MsChkMod(pc),d0
move.b 0(a0,d0.w),d0
or.b d0,(a1)
moveq #1,d0
sub.w MsChkMod(pc),d0
move.b d2,0(a0,d0.w) *今回のを記憶
move.b (a1),d2
or.b MaeBot(pc),d2 *前のボタン状態
move.b (a1),MaeBot
move.b d2,(a1)
movea.l $0934.w,a0
jsr (a0) *ソフトキーボート
movea.l $0938.w,a0
jsr (a0) *マウスカーソル書き替え
SBLL2: ******後処理
bclr.b #$07,$0bbf.w *bit7flag をクリア ->処理終わり
clr.b D0933 * 0=3バイト読んでマウスを動かした
move.w #3,MsConChk *コネクトチェック 非接続なら -1していく
movem.l (sp)+,d0-d2/a0-a1
rte
SCCB_JMP:
move.l SCCB_JPT(pc),-(sp)
rts
SCCB_JPT:
.dc.l 0
MS_SEL: *-----------------------------
* ($17B)[$05EC]
* IOCS $7B MS_SEL
*
MS_SEL_ = $05EC
cmpi.w #$100,d1 *本体
beq @f
cmpi.w #$101,d1 *キーボード
beq @f
MS_SEL_JMP:
move.l MS_SEL_JPT(pc),-(sp)
rts
MS_SEL_JPT:
.dc.l 0
@@:
move.l #'TEMC',d0
rts
MS_LIMIT:*-----------------------------
* ($177)[$05DC]
* IOCS $77 MS_LIMIT
*
MS_LIMIT_ = $05DC
cmpi.l #'TEMC',d1
beq @f
MS_LIMIT_JMP:
move.l MS_LIMIT_JPT(pc),-(sp)
rts
MS_LIMIT_JPT:
.dc.l 0
@@:
cmpi.l #0,d2 *本体
beq @f
cmpi.l #1,d2 *キーボード
beq @f
bra MS_LIMIT_JMP
@@:
movem.l d1/a0,-(sp)
lea Data0(pc),a0
tst.l d2
beq @f
lea Data1(pc),a0
@@: moveq #0,d0
btst #0,(a0)
beq @f
ori.l #$FF000000,d0
@@: btst #1,(a0)
beq @f
ori.l #$00FF0000,d0
@@: moveq #0,d1
move.b 1(a0),d1
lsl.l #8,d1
or.w d1,d0
move.b 2(a0),d0
move.b #-1,3(a0)
clr.b 1(a0) *移動量はクリア
clr.b 2(a0)
*clr.l (a0)
movem.l (sp)+,d1/a0
rts
*-----NOXMS.x
*OldD:
* .dc.l 0
nuldata:
.dc.b 0,0,0,0
.even
*-----work
MaeBot: .dc.b 0 *前のボタン状態
.even
Data0: .dc.l 0 *MS_LIMIT戻り値用 本体 (form.同nuldata)
Data1: .dc.l 0 *MS_LIMIT戻り値用 キーボード (form.同nuldata)
*読んだら +3.bを-1に!
BotBuf: .dc.b 0,0 *ボタンの状態 0:キーボード側 1:本体側
.even
D0933: .dc.b 0
.even
StCot: .dc.w 0 *割り込みカウント?
MsChkMod:
.dc.w 0 *0:本体側チェック中 1:キーボード側チェック中
MsConChk:
.dc.w 3 *コネクトチェック 非接続なら -1していく
*-----flag
DrvMod: .dc.b 3 *bit 0:本体 bit1:キーボード 1:機能する 0:しない
.even
StaMod: .dc.b 0 *常駐モード 0;command 1;config
.even
EndStatio:*******************常駐部
ETYP_KEEP:*--------------------------------------
**常駐!
move.l #EndStatio,$e(a5)
Print CRLF(pc)
Print LR1(pc)
Print LR2_3(pc)
move.l SCCB_,SCCB_JPT
lea SCCB(pc),a0
move.l a0,SCCB_
move.l a0,SCCB__
move.l IM09b6_,IM09b6_JPT
lea IM09b6(pc),a0
move.l a0,IM09b6_
move.l MS_SEL_,MS_SEL_JPT
lea MS_SEL(pc),a0
move.l a0,MS_SEL_
move.l MS_LIMIT_,MS_LIMIT_JPT
lea MS_LIMIT(pc),a0
move.l a0,MS_LIMIT_
move.b #-1,StaMod
moveq.l #$00,d0
rts
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$00F00000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$00F00000,a0
bcc IC1
cmp.l #HEAD1,$0100+(head-SS)(a0)
bne @f
cmp.l #HEAD2,$0104+(head-SS)(a0)
bne @f
adda.l #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
DevChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l #$6800,a0
DC1: cmp.l #'NUL ',(a0)
bne @f
cmp.l #' ',4(a0)
bne @f
bra DC4
@@:
addq.l #2,a0
bra DC1 *絶対あるはず。。
DC4:
move.l d0,-(sp)
suba.l #(dhead-SS),a0 *リンクポインタ
DC2: movea.l (a0),a0
move.l a0,d0
bmi DC3
cmp.l #HEAD1,(dhead-SS)(a0)
bne DC2
cmp.l #HEAD2,(dhead-SS)+4(a0)
bne DC2
cmp.l #HEAD1,(head-SS)(a0)
bne DC2
cmp.l #HEAD2,(head-SS)+4(a0)
bne DC2
*あった
move.l (sp)+,d0
rts
DC3:
move.l (sp)+,d0
sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
@@: move.b (a2)+,d2
subi.b #'0',d2
bcs AIr
cmpi.b #9,d2
bhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
bra @b
AIr: subq #1,a2
rts
init:*------------------------------------------------------------------
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
move.l a0,d0
bne @f
bsr DevChk
@@: movea.l a0,a3 *常駐先頭アドレス
movea.l SCCB_,a0
suba #SCCB-head,a0
bsr MarkerChk
bne @f
bset #0,d1
@@:
movea.l SCCB__,a0
suba #SCCB-head,a0
bsr MarkerChk
bne @f
bset #1,d1
@@:
movea.l IM09b6_,a0
suba #IM09b6-head,a0
bsr MarkerChk
bne @f
bset #2,d1
@@:
movea.l MS_SEL_,a0
suba #MS_SEL-head,a0
bsr MarkerChk
bne @f
bset #3,d1
@@:
movea.l MS_LIMIT_,a0
suba #MS_LIMIT-head,a0
bsr MarkerChk
bne @f
bset #4,d1
@@:
*d1に常駐状態
USER
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
suba.l a1,a1
SUPER
movea.l d0,a1
move.b DrvMod-SS(a3),DrvMod
move.b StaMod-SS(a3),StaMod
USER
conl: ** コマンドラインチェック **
tst.b (a2)+ *スキップ
sw: move.b (a2)+,d0
beq keep
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe: pea LR6(pc)
bra PE *end
swc: **スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
beq help
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
beq free
cmpi.b #'n',d0
beq nswc
cmpi.b #'m',d0
beq mswc
cmpi.b #'k',d0
beq kswc
cmpi.b #'h',d0
beq help
swcerr: pea LR7(pc)
bra PE *end
nswc:******************
move.b #3,DrvMod *bit 0:本体 bit1:キーボード 1:機能する 0:しない
bra sw
mswc:******************
move.b #1,DrvMod *bit 0:本体 bit1:キーボード 1:機能する 0:しない
bra sw
kswc:******************
move.b #2,DrvMod *bit 0:本体 bit1:キーボード 1:機能する 0:しない
bra sw
help:******************
pea LRH(pc)
bra PE *end
keep: ************************** 常駐させる
move.l a3,d0
beq @f
*既に常駐、設定変更
suba.l a1,a1
SUPER
movea.l d0,a1
move.b DrvMod(pc),DrvMod-SS(a3)
clr.b MaeBot-SS(a3) *前のボタン状態初期化
USER
bsr keepsub
pea LR5(pc)
bra PE *end
@@:
**セット
suba.l a1,a1
SUPER
movea.l d0,a1
move.l SCCB_,SCCB_JPT
lea SCCB(pc),a0
move.l a0,SCCB_
move.l a0,SCCB__
move.l IM09b6_,IM09b6_JPT
lea IM09b6(pc),a0
move.l a0,IM09b6_
move.l MS_SEL_,MS_SEL_JPT
lea MS_SEL(pc),a0
move.l a0,MS_SEL_
move.l MS_LIMIT_,MS_LIMIT_JPT
lea MS_LIMIT(pc),a0
move.l a0,MS_LIMIT_
USER
bsr keepsub
pea LRKP(pc)
DOS _PRINT
addq #4,sp
clr.w -(sp)
move.l #EndStatio-StartStatio,-(sp)
DOS _KEEPPR
****************
keepsub:
*lea LR2(pc),a0
*moveq #0,d0
*move.b DrvMod(pc),d0 *ボタンモード
*add.w d0,d0
*add.w d0,d0
*move.l (a0,d0.w),-(sp)
pea LR2_3(pc)
DOS _PRINT
addq #4,sp
rts
free: *****************************常駐解除
move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@:
tst.b StaMod
beq @f
pea LRCN(pc) **CONFIG常駐
bra PE *end
@@:
cmpi.w #$1F,d1
beq @f
pea LR4(pc) **ベクタが占領
bra PE *end
@@:
suba.l a1,a1
SUPER
movea.l d0,a1
move.l (SCCB_JPT-SS)(a3),SCCB_
move.l (SCCB_JPT-SS)(a3),SCCB__
move.l (IM09b6_JPT-SS)(a3),IM09b6_
move.l (MS_SEL_JPT-SS)(a3),MS_SEL_
move.l (MS_LIMIT_JPT-SS)(a3),MS_LIMIT_
USER
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq #4,sp
pea LR3(pc)
PE: DOS _PRINT
addq.w #4,sp
DOS _EXIT
LR2: .dc.l LR2_0,LR2_1,LR2_2,LR2_3
LR2_0: .dc.b 0
LR2_1: .dc.b ' 本体のMOUSEが使用出来ます。',$0d,$0a,0
LR2_2: .dc.b ' キーボードのMOUSEが使用出来ます。',$0d,$0a,0
LR2_3: .dc.b ' 本体とキーボードのMOUSEが併用出来ます。',$0d,$0a,0
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
LR3: .dc.b ' 常駐解除しました。',$0d,$0a,0
LR4: .dc.b ' ベクタが占領されています。',$0d,$0a,0
LR5: .dc.b ' 設定を変更しました。',$0d,$0a,0
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
LRTB: .dc.b ' ボタン機能を反転します。',$0d,$0a,0
LRCN: .dc.b ' CONFIG.SYSで登録されています。',$0d,$0a
.dc.b ' 常駐解除できません。',$0d,$0a,0
.even
LRH:
.dc.b $0d,$0a
.dc.b '使用法:TMS.x [switch]',$0d,$0a
.dc.b ' /R ・・・・ 常駐解除します。',$0d,$0a
*.dc.b ' /N ・・・・ 両方のマウスで動作します。',$0d,$0a
*.dc.b ' /M ・・・・ 本体接続マウスのみ動作します。',$0d,$0a
*.dc.b ' /K ・・・・ キーボード接続マウスのみ動作します。',$0d,$0a
*.dc.b ' ただし、コネクトしてあると処理落ちします。',$0d,$0a
.dc.b $0d,$0a,0
.even
LR1: .dc.b 'X68k TWIN MOUSE DRIVER Version 0.62 Copyright 1994 1995 TNB製作所'
CRLF: .dc.b $0d,$0a,0
.even
.end init